#include <gtest/gtest.h>
#include <iostream>
#include <string>
#include "bstree.hpp"
using namespace cr;

// TestCase 事件(即: 全局事件+TestSuite 事件)

class BSTreeTest : public testing::Test
{
public:
	static void SetUpTestCase() // 全局单元测试
	{
		// 处理全局的测试数据对象
		std::cout << "全局单元测试初始化" << std::endl;
	}

	virtual void SetUp() override // 独立单元测试
	{
		// 处理每个单元测试所需的独立数据对象（成员对象）
		std::cout << "当前单元测试初始化" << std::endl;
	}

	virtual void TearDown() override
	{
		std::cout << "当前单元测试环境释放" << std::endl;
	}

	static void TearDownTestCase()
	{
		std::cout << "全局单元测试释放" << std::endl;
	}

public:
};

TEST_F(BSTreeTest, insertAnderase)
{
	int arr[] = {8, 3, 1, 10, 6, 4, 7, 14, 13};
	BSTree<int> bt;
	for (auto &it : arr)
	{
		bt.insert(it);
	}
	bt.inorder();

	for (auto &it : arr)
	{
		bt.erase(it);
	}
	bt.inorder();
}

TEST_F(BSTreeTest, copy)
{
	int arr[] = {8, 3, 1, 10, 6, 4, 7, 14, 13};
	BSTree<int> bt;
	for (auto &it : arr)
	{
		bt.insert(it);
	}
	bt.inorder();

	BSTree<int> tmp(bt);
	tmp.inorder();

	for (auto &it : arr)
	{
		tmp.erase(it);
	}
	tmp.inorder();

	tmp = bt;
	bt.inorder();
}

int main(int argc, char *argv[])
{
	testing::InitGoogleTest(&argc, argv);

	return RUN_ALL_TESTS();
}